import os
from typing import List

from llama_index.embeddings.dashscope import DashScopeEmbedding

from .dashscope_embedding_config import DashScopeEmbeddingConfig
from ..embedding_interface import EmbeddingInterface


class DashScopeEmbeddingService(EmbeddingInterface):
    """
    一个实现了 EmbeddingInterface 的具体服务，
    它在内部使用 LlamaIndex 的 DashScopeEmbedding。
    这是一个纯粹的工具类，其行为由传入的配置对象决定。
    """

    def __init__(self, config: DashScopeEmbeddingConfig):
        self._config = config
        
        api_key = config.api_key or os.getenv("DASHSCOPE_API_KEY")
        
        if not api_key:
            raise ValueError("DashScope API Key 未在配置对象中提供，也未在环境变量 DASHSCOPE_API_KEY 中设置。")

        self._embed_model = DashScopeEmbedding(
            model_name=config.model_name,
            api_key=api_key
        )

    async def embed(self, texts: List[str]) -> List[List[float]]:
        """
        异步调用 DashScope 模型生成文本向量。
        """
        return await self._embed_model.aget_text_embedding_batch(texts)

    def get_native_model(self) -> DashScopeEmbedding:
        """
        返回底层的 LlamaIndex DashScopeEmbedding 实例。
        """
        return self._embed_model 